#pragma once
#include <memory>
#include <vector>
#include <list>

class IFEQ {
  public:
  template <typename T>
  static bool ifeq(std::vector<T>& a, std::vector<T>& b) {
    bool eq = false;
    if (a.size() == b.size()) {
      int i;
      auto ap = a.begin();
      auto bp = b.begin();
      for (i = 0; i < a.size(); ++i) {
        if ((*ap) != (*bp)) return eq;
        ++ap; ++bp;
  
      }
      return eq = true;
    }
    else return eq;
  
  }

  template <typename T>
  static bool ifeq(std::shared_ptr<std::list<T>> a, std::shared_ptr<std::list<T>> b) {
    bool eq = false;
    if (a->size() == b->size()) {
      int i;
      auto ap = a->begin();
      auto bp = b->begin();
      for (i = 0; i < a->size(); ++i) {
        if ((*ap)!=(*bp)) return eq;
        ++ap; ++bp;
  
      }
      return eq = true;
    }
    else return eq;
  
  }
};